package com.yupi.project.service;

import com.yupi.project.config.RateLimiterConfig;
import com.yupi.project.utils.RateLimiterUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * 流量控制服务
 *
 * @author yupi
 */
@Service
@Slf4j
public class RateLimiterService {

    @Resource
    private RateLimiterUtil rateLimiterUtil;
    
    @Resource
    private RateLimiterConfig rateLimiterConfig;

    /**
     * 检查接口调用是否允许（基于流量控制）
     *
     * @param interfaceId 接口ID
     * @param userId 用户ID
     * @return 是否允许调用
     */
    public boolean isAllowedCall(Long interfaceId, Long userId) {
        // 检查是否启用流量控制
        if (!rateLimiterConfig.isEnabled()) {
            return true;
        }
        
        // 获取接口特定的流量控制配置
        RateLimiterConfig.InterfaceRateLimit rateLimit = rateLimiterConfig.getInterfaceRateLimit(interfaceId);
        int maxTokens = rateLimit.getMaxTokens();
        double tokensPerSecond = rateLimit.getTokensPerSecond();
        
        // 调用RateLimiterUtil进行流量控制检查，使用Lua脚本实现的令牌桶算法
        return rateLimiterUtil.isAllowedInterfaceRequest(interfaceId, userId, maxTokens, tokensPerSecond);
    }
}